/*
 * IFile.h
 *
 * Interface zdroja adresara
 *
 *  Created on: 1.4.2011
 *      Author: Tomas Srna
 */

#ifndef __IFILE_H_
#define __IFILE_H_

#include <string>
#include <cstdio>

class IFile
{
public:
	/*
	 * Otvorenie suboru
	 * @in filename	Nazov suboru v danom zdroji
	 * @in mode		"r" pre citanie, "w" pre zapis (viz fopen() dokumentaciu)
	 */
	virtual void open(const char * filename, const char * mode) = 0;

	/*
	 * Citanie zo suboru
	 * @in buf		Ukazatel na buffer
	 * @in len		Velkost nacitania
	 * @return		Pocet precitanych znakov
	 */
	virtual int read(void * buf, int len) = 0;

	/*
	 * Zapis do suboru
	 * @in buf		Ukazatel na buffer
	 * @in len		Velkost zapisania
	 * @return		Pocet zapisanych znakov
	 */
	virtual int write(const void * buf, int len) = 0;

	/*
	 * Vracia, ci sme na konci suboru
	 * @return		Ci sme na konci
	 */
	virtual bool eof() = 0;

	/*
	 * Typ interfacu (vracia staticky string, napr. Filesystem, TAR)
	 * @return		Filesystem, TAR, ...
	 */
	virtual std::string type() const = 0;

	/*
	 * Zavrie subor
	 */
	virtual void close() = 0;

	/*
	 * Virtualny destruktor
	 */
	virtual ~IFile() {};
};

#endif /* __IFILE_H_ */
